package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.entity.SysWater;
import com.ruoyi.system.domain.SysUserWater;

import java.util.List;
import java.util.Set;

/**
 * 投喂机业务层
 *
 * @author xiongdong
 */
public interface ISysWaterService {
    /**
     * 根据条件分页查询投喂机数据
     *
     * @param sysWater 投喂机信息
     * @return 投喂机数据集合信息
     */
    public List<SysWater> selectSysWaterList(SysWater sysWater);

    /**
     * 根据用户ID查询投喂机列表
     *
     * @param userId 用户ID
     * @return 投喂机列表
     */
    public List<SysWater> selectSysWatersByUserId(Long userId);

    /**
     * 根据用户ID查询投喂机权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public Set<String> selectSysWaterPermissionByUserId(Long userId);

    /**
     * 查询所有投喂机
     *
     * @return 投喂机列表
     */
    public List<SysWater> selectWaterAll();

    /**
     * 根据用户ID获取投喂机选择框列表
     *
     * @param userId 用户ID
     * @return 选中投喂机ID列表
     */
    public List<Long> selectWaterListByUserId(Long userId);

    /**
     * 通过投喂机ID查询投喂机
     *
     * @param waterId 投喂机ID
     * @return 投喂机对象信息
     */
    public SysWater selectWaterById(Long waterId);

    /**
     * 校验投喂机名称是否唯一
     *
     * @param sysWater 投喂机信息
     * @return 结果
     */
    public String checkWaterNameUnique(SysWater sysWater);

    /**
     * 校验投喂机权限是否唯一
     *
     * @param sysWater 投喂机信息
     * @return 结果
     */
    public String checkWaterKeyUnique(SysWater sysWater);

    /**
     * 校验投喂机是否允许操作
     *
     * @param sysWater 投喂机信息
     */
    public void checkWaterAllowed(SysWater sysWater);

    /**
     * 校验投喂机是否有数据权限
     *
     * @param waterId 投喂机id
     */
    public void checkWaterDataScope(Long waterId);

    /**
     * 通过投喂机ID查询投喂机使用数量
     *
     * @param waterId 投喂机ID
     * @return 结果
     */
    public int countUserWaterByWaterId(Long waterId);

    /**
     * 新增保存投喂机信息
     *
     * @param sysWater 投喂机信息
     * @return 结果
     */
    public int insertWater(SysWater sysWater);

    /**
     * 修改保存投喂机信息
     *
     * @param sysWater 投喂机信息
     * @return 结果
     */
    public int updateWater(SysWater sysWater);

    /**
     * 修改投喂机状态
     *
     * @param sysWater 投喂机信息
     * @return 结果
     */
    public int updateWaterStatus(SysWater sysWater);

    /**
     * 修改数据权限信息
     *
     * @param sysWater 投喂机信息
     * @return 结果
     */
    public int authDataScope(SysWater sysWater);

    /**
     * 通过投喂机ID删除投喂机
     *
     * @param waterId 投喂机ID
     * @return 结果
     */
    public int deleteWaterById(Long waterId);

    /**
     * 批量删除投喂机信息
     *
     * @param waterIds 需要删除的投喂机ID
     * @return 结果
     */
    public int deleteWaterByIds(Long[] waterIds);

    /**
     * 取消授权用户投喂机
     *
     * @param userWater 渔场和投喂机关联信息
     * @return 结果
     */
    public int deleteUserWater(SysUserWater userWater);

    /**
     * 批量取消授权用户投喂机
     *
     * @param waterId   投喂机ID
     * @param userIds 需要取消授权的用户数据ID
     * @return 结果
     */
    public int deleteDeptWaters(Long waterId, Long[] userIds);

    /**
     * 批量选择授权用户投喂机
     *
     * @param waterId   投喂机ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int insertDeptWaters(Long waterId, Long[] userIds);
}
